/**
 * 认证相关工具函数
 */

// Token相关
export const TOKEN_KEY = 'token'
export const USER_INFO_KEY = 'userInfo'

/**
 * 获取Token
 */
export function getToken() {
  // 优先使用新的键名，兼容旧的键名
  return localStorage.getItem('ai_tutor_token') || localStorage.getItem(TOKEN_KEY)
}

/**
 * 设置Token
 */
export function setToken(token) {
  // 同时设置新旧键名，确保兼容性
  localStorage.setItem(TOKEN_KEY, token)
  localStorage.setItem('ai_tutor_token', token)
}

/**
 * 移除Token
 */
export function removeToken() {
  // 移除新旧键名
  localStorage.removeItem(TOKEN_KEY)
  localStorage.removeItem('ai_tutor_token')
}

/**
 * 获取用户信息
 */
export function getUserInfo() {
  try {
    // 优先使用新的键名，兼容旧的键名
    const userInfo = localStorage.getItem('ai_tutor_user') || localStorage.getItem(USER_INFO_KEY)
    if (!userInfo) {
      console.log('localStorage中没有找到用户信息')
      return null
    }

    const parsed = JSON.parse(userInfo)
    console.log('从localStorage获取的用户信息:', parsed)

    // 验证用户信息的完整性
    const userId = parsed.id || parsed.userId
    if (!userId) {
      console.warn('⚠️ 用户信息缺少ID字段')
    } else {
      // 确保同时有id和userId字段
      parsed.id = userId
      parsed.userId = userId
    }

    if (!parsed.username || parsed.username === '用户') {
      console.warn('⚠️ 用户信息缺少有效的用户名')
    }

    console.log('✅ 最终返回的用户信息:', parsed)
    return parsed
  } catch (error) {
    console.error('解析用户信息失败:', error)
    return null
  }
}

/**
 * 设置用户信息
 */
export function setUserInfo(userInfo) {
  try {
    console.log('准备保存用户信息:', userInfo)

    // 验证必要字段
    if (!userInfo) {
      console.error('用户信息为空，无法保存')
      return false
    }

    if (!userInfo.id && !userInfo.userId) {
      console.warn('用户信息缺少ID字段，添加临时ID')
      userInfo.id = Date.now()
    }

    if (!userInfo.username) {
      console.warn('用户信息缺少用户名，使用默认值')
      userInfo.username = '用户'
    }

    // 同时设置新旧键名，确保兼容性
    localStorage.setItem(USER_INFO_KEY, JSON.stringify(userInfo))
    localStorage.setItem('ai_tutor_user', JSON.stringify(userInfo))
    console.log('用户信息保存成功')

    // 验证保存是否成功
    const saved = localStorage.getItem(USER_INFO_KEY)
    console.log('验证保存的数据:', JSON.parse(saved))

    return true
  } catch (error) {
    console.error('保存用户信息失败:', error)
    return false
  }
}

/**
 * 移除用户信息
 */
export function removeUserInfo() {
  // 移除新旧键名
  localStorage.removeItem(USER_INFO_KEY)
  localStorage.removeItem('ai_tutor_user')
}

/**
 * 清除所有认证信息
 */
export function clearAuth() {
  removeToken()
  removeUserInfo()
  // 清除其他可能的认证相关数据
  localStorage.removeItem('ai_tutor_permissions')
}

/**
 * 检查是否已登录
 */
export function isLoggedIn() {
  return !!getToken()
}

/**
 * 将文件转换为Base64
 */
export function fileToBase64(file) {
  return new Promise((resolve, reject) => {
    const reader = new FileReader()
    reader.readAsDataURL(file)
    reader.onload = () => {
      // 移除data:image/jpeg;base64,前缀
      const base64 = reader.result.split(',')[1]
      resolve(base64)
    }
    reader.onerror = error => reject(error)
  })
}

/**
 * 将Canvas转换为Base64
 */
export function canvasToBase64(canvas) {
  // 获取canvas的base64数据，移除前缀
  return canvas.toDataURL('image/jpeg', 0.8).split(',')[1]
}

/**
 * 检查浏览器是否支持摄像头
 */
export function checkCameraSupport() {
  return !!(navigator.mediaDevices && navigator.mediaDevices.getUserMedia)
}

/**
 * 获取摄像头权限
 */
export async function getCameraPermission() {
  try {
    const stream = await navigator.mediaDevices.getUserMedia({ 
      video: { 
        width: { ideal: 640 },
        height: { ideal: 480 },
        facingMode: 'user' // 前置摄像头
      } 
    })
    return stream
  } catch (error) {
    console.error('获取摄像头权限失败:', error)
    throw new Error('无法访问摄像头，请检查权限设置')
  }
}

/**
 * 停止摄像头流
 */
export function stopCameraStream(stream) {
  if (stream) {
    stream.getTracks().forEach(track => track.stop())
  }
}

/**
 * 格式化文件大小
 */
export function formatFileSize(bytes) {
  if (bytes === 0) return '0 Bytes'
  
  const k = 1024
  const sizes = ['Bytes', 'KB', 'MB', 'GB']
  const i = Math.floor(Math.log(bytes) / Math.log(k))
  
  return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]
}

/**
 * 检查文件类型
 */
export function checkFileType(file, allowedTypes = ['jpg', 'jpeg', 'png', 'bmp']) {
  const fileType = file.name.split('.').pop().toLowerCase()
  return allowedTypes.includes(fileType)
}

/**
 * 检查文件大小
 */
export function checkFileSize(file, maxSize = 10 * 1024 * 1024) { // 默认10MB
  return file.size <= maxSize
}
